// 云函数入口文件
const cloud = require('wx-server-sdk')

cloud.init({
    env: cloud.DYNAMIC_CURRENT_ENV
})

/**
 * 文件上传云函数
 * @param {Object} event - 云函数调用参数
 * @param {string} event.fileContent - Base64编码的文件内容
 * @param {string} event.fileName - 文件名称
 * @param {string} event.folder - 存储文件夹路径，如 'resumes', 'templates', 'avatars'
 * @return {Object} 包含fileId和fileType的对象
 */
exports.main = async (event, context) => {
    const { fileContent, fileName, folder = 'default' } = event

    if (!fileContent || !fileName) {
        return {
            code: -1,
            message: '缺少必要参数：fileContent或fileName',
            data: null
        }
    }

    try {
        // 获取文件扩展名
        const fileExtension = fileName.substring(fileName.lastIndexOf('.') + 1).toLowerCase()

        // 判断文件类型
        let fileType = ''
        if (['pdf'].includes(fileExtension)) {
            fileType = 'pdf'
        } else if (['doc', 'docx'].includes(fileExtension)) {
            fileType = 'word'
        } else if (['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp'].includes(fileExtension)) {
            fileType = 'image'
        } else {
            fileType = 'other'
        }

        // 解码Base64文件内容
        const buffer = Buffer.from(fileContent, 'base64')

        // 生成唯一文件名，避免文件名冲突
        const timestamp = Date.now()
        const randomStr = Math.random().toString(36).substring(2, 8)
        const cloudPath = `${folder}/${timestamp}_${randomStr}_${fileName}`

        // 上传文件到云存储
        const result = await cloud.uploadFile({
            cloudPath,
            fileContent: buffer
        })

        // 如果是图片类型，获取临时访问链接
        let fileUrl = null;
        if (fileType === 'image') {
            try {
                // 获取文件临时下载链接
                const tempUrlResult = await cloud.getTempFileURL({
                    fileList: [result.fileID]
                });

                if (tempUrlResult.fileList && tempUrlResult.fileList.length > 0) {
                    fileUrl = tempUrlResult.fileList[0].tempFileURL;
                }
            } catch (urlError) {
                console.error('获取图片URL失败', urlError);
                // 获取URL失败不影响整体上传结果
            }
        }

        return {
            code: 0,
            message: '文件上传成功',
            data: {
                fileId: result.fileID,
                fileType,
                fileName,
                originalName: fileName,
                fileUrl: fileUrl // 仅图片类型返回URL
            }
        }
    } catch (error) {
        console.error('文件上传失败', error)
        return {
            code: -1,
            message: `文件上传失败: ${error.message}`,
            data: null
        }
    }
}